괴담집 프로젝트의 DB 전면 개편하기

작성일:2025. 7. 18.
수정일:2025. 8. 7.
괴담집 에셋 필드
괴담집 에셋 필드

프로젝트를 개발하던중 에셋을 저장한 구조에 대해 불편함을 느끼기 시작하였다. 현재 프로젝트에서 에셋이 가장 중요한 역할을 하고있기 때문에 후에 다양한 효과의 추가와 관리를 위해선 좀 더 확실한 분류와 정리가 필요하다는 생각이 들었다.

개발중에 느낀 불편함과 문제점#

Prisma를 통해 에셋들을 가져올때부터 실제로 음향을 적용하여 테스트하고 strapi를 통해 새로운 효과를 추가혈때 모든 과정에서 불편함들을 느꼇다.

Asset을 가져올때의 문제점#

처음 Gemini를 활용하여 고민을 하였고 에셋들을 SOUND,AMBIENCE,VISUAL,TEXT,PAUSE 5가지의 카테고리로 분류하였다. 소리 음향의 경우 Howler.js를 통해 로드를 하게 되는데 지금은 소리에 관련된 배경음과 효과음 두개가 나눠져 있어 에셋을 가져와서 필터링하는데에 코드가 좀 길어진다.

먼저 모든 에셋들에 대한 정보를 가져오고 이후에 필터링을 거쳐서 사운드와,효과음에 해당하는 효과들만 필터링하여 넘거야 한다.

만약 SOUNDAMBIENCE 두개를 합치면 에셋을 가져올때부터 필터링이 가능하기 때문에 더 깔끔해질것으로 생각된다.

겹치는 필드들#

처음 Gemini와 대화하여 만들게된 필드중 에셋들에 대한 설명을 담고있는 필드를 살펴보면 display_name, description, usage_guide, keywords 총 4개의 필드를 통해 에셋에 대한 설명을 하고 있다. 이 설명들은 사용자나 개발자가 아닌 ai가 새로운 프롬프트를 만드는 RAG로서 사용하려는 목적이기 때문에 만들게 되었다.

하지만 문제는 필드의 역할이 모호하고 겹치는 부분이 있어 사람이 새로운 에셋을 추가하려고 할때 내용을 어떤식으로 추가해야하는지 겹치는 부분때문에 확실하지 않다는 것이다.

description 하나로 통합하고 tag를 사용해 ai의 이해를 도울 생각이다.

에셋들의 세부 사항#

음향들을 가져와서 실제로 사용하면서 각각 음향들의 사용 성격이 달라 좀 불편했다. 예를 들어 어떤 심장소리의 경우 두근 두근 거리는 소리가 충분히 길게 이어져 소리를그냥 한번 재생하면 충분했지만 다른 소리의 경우 짧게 두근 거리는 소리가 한번이라 코드를 통해 5번을 반복하게 하는등 고정을 시켜야 했다. 하지만 이렇게 되면 에셋을 확인하면서 코드를 하나씩 수정해주어야 하기 때문에 일이 두배가 될수 있다. 따라서 json을 담은 하나의 필드를 만들고 그 안에 에셋을 저장하면서 에셋을 확인하고 해당 에셋이 반복이 필요한지 아니면 특정 구간만 사용해야 하는지등에 대한 설정을 하게 된다면 코드를 불편하게 수정할 필요가 사라질 것이다.

어떻게 바꿀것인가#

먼저 카테고리를 수정하여 SOUND, VISUAL, TEXT 3가지로 나누고 불필요한 필드를 삭제하고 다시 작성할 것이다.

또한 properties라는 json 필드를 만들어 유연하게 다른 속성들을 추가할 수 있도록 할 예정이다.

필드#

불필요한 모든 필드를 삭제하고 단순하게 이름,카테고리,파일,설명,태그로만 나눌것이다.

그룹화#

서브카테고리를 삭제하고 태그에 그룹화할수 있는 요소를 추가함으로서 대체한다.

설명 작성법#

  1. 소리의 주체: 무엇이 내는 소리인가?
  • 소리의 근원을 명확히 밝힌다.
  • 예시: 문,발걸음,괴물,기계,바람
  1. 소리의 특성: 어떻게 들리는 소리인가?
  • 소리의 질감, 높낮이, 길이, 빠르기 등을 묘사하는 형용사를 사용한다.
  • 예시: 날카로운, 묵직한, 울리는,젖은, 마른, 느린, 빠른, 끊어지는
  1. 상황과 환경: 어디서 어떤 상황에서 들리는 소리인가?
  • 소리가 발생하는 공간적, 상황적 배경을 제시한다.
  • 예시: 텅 빈 복도에서, 비 오는 창밖에서, 숨 막히는 정적 속에서, 격렬한 싸움중에
  1. 감정적 효과: 듣는 이에게 어떤 감정을 유발하는가?
  • 이 소리가 이야기에 기여하는 감정적, 심리적 효과를 설면한다.

  • 예시: 불안감, 긴장감, 충격, 공포, 소름, 슬픔

  • 좋은 예시 vs 나쁜 예시

    • 나쁜 예: "문 삐걱거리는 소리." (→ 너무 단순하여 AI가 어떤 상황에 써야 할지 충분히 알 수 없다.)
    • 좋은 예: "(주체) 낡고 무거운 나무 문이 (특성) 신경을 긁는 듯 '끼이이익'하고 (상황) 정적 속에서 아주 느리게 열리는 소리. 듣는 이에게 (감정) 숨 막히는 긴장감과 불길한 예감을 준다."

태그 작성법#

중분류#

  • 역할: 이 에셋이 어떤 맥락과 목적으로 사용되는지 정의한다.
청각 효과 분류
  1. 충격과 파괴 (Impact & Destruction)

    • 역할: 갑작스러운 사건, 점프 스케어, 파괴적인 상황을 표현한다.
    • 태그 예시: impact, crash, slam, break, explosion
  2. 움직임과 접근 (Movement & Approach)

    • 역할: 인물이나 미지의 존재가 움직이거나 다가오는 것을 묘사한다.
    • 태그 예시: footstep, movement, run, approach, slither
  3. 심리적 반응 (Psychological Response)

    • 역할: 등장인물의 내면적인 공포, 불안, 긴장 등 심리 상태를 표현한다.
    • 태그 예시: heartbeat, breathing, whisper, psychological
  4. 환경음과 자연 (Environment & Nature)

    • 역할: 이야기의 배경이 되는 자연 환경이나 날씨를 묘사한다.
    • 태그 예시: nature, weather, rain, wind, animal
  5. 기계와 도시 (Mechanical & Urban)

    • 역할: 문명과 관련된 기계 장치나 도시의 소음을 표현한다.
    • 태그 예시: machine, device, urban, technology, electronic
  6. 초자연적 존재 (Supernatural Presence)

    • 역할: 괴물, 유령 등 비현실적인 존재나 기이한 현상을 나타낸다.
    • 태그 예시: creature, monster, supernatural, eerie
  7. 물체 상호작용 (Object Interaction)

    • 역할: 특정 물건이나 재질이 만들어내는 소리를 표현한다.
    • 태그 예시: material, object, metal, wood, liquid
  8. 음악 및 톤 (Music & Tone)

    • 역할: TENSION_MUSIC처럼 명확한 멜로디나 화성이 있는 배경음악, 또는 톤에 가까운 효과들을 따로 관리한다.
    • 태그 예시: drone, music, ambience
시각 효과 분류
  1. 화면 전체 효과 (Full Screen Effects)

    • 역할: 화면 전체에 영향을 주어 상황의 긴박감이나 상태 변화를 표현한다.
    • 태그 예시: fullscreen, shake, flash, invert
  2. 오버레이와 이미지 (Overlays & Images)

    • 역할: 화면 위에 이미지를 덧씌워 시각적 정보를 직접적으로 전달한다.
    • 태그 예시: overlay, image, splatter, handprint
  3. 필터와 왜곡 (Filters & Distortion)

    • 역할: 화면의 색감이나 형태를 왜곡하여 비현실적인 느낌을 준다.
    • 태그 예시: filter, distortion, glitch, grain
텍스트 효과
  1. 등장과 퇴장 (Entrance & Exit)

    • 역할: 텍스트가 나타나고 사라지는 방식을 제어한다.
    • 태그 예시: appear, disappear, fade, reveal
  2. 움직임과 변형 (Motion & Transform)

    • 역할: 텍스트의 위치나 형태를 바꾸어 동적인 느낌을 준다.
    • 태그 예시: motion, shake, float, jitter
  3. 스타일과 강조 (Style & Emphasis)

    • 역할: 텍스트의 색상, 밝기 등 스타일을 바꾸어 특정 내용을 강조한다.
    • 태그 예시: color, glow, style, blur

소분류#

  • 역할: 소리의 구체적인 원이니나 특징을 명시한다.
청각 효과 분류
  • 역할: 소리의 구체적인 원인이나 특징을 명시한다.
  • 태그 예시: 문 (Door), 발걸음 (Footstep), 심장박동 (Heartbeat), 비 (Rain), 전화기 (Phone), 괴물 (Creature)

백터DB#

이후에 백터DB를 적용하는데에도 변경된 형식이 더 잘어울린다. 벡터DB를 적용하기 위해서는 현제의 워크플로우를 변형하고 개편해야 한다.